#include <nanobdd/common.h>
#include <nanobdd/nanobdd.h>
#include <iostream>
using namespace nanobdd;
int
main(int argc, char** argv) {
  std::cout << "Grettings!" << std::endl;

  auto nanobdd = Nanobdd(1000, 1000);
  // std::cout << nanobdd.getMyCache().cache()[999].hash << std::endl;

  nanobdd.createVars(32);

  // Bdd a = nanobdd.createVar(0);
  // Bdd b = nanobdd.createVar(1);
  Bdd ab = Nanobdd::getVar(0) & Nanobdd::getVar(1);
  Bdd aorb = Nanobdd::getVar(0) | Nanobdd::getVar(1);
  Bdd bc = Nanobdd::getVar(1) & Nanobdd::getVar(2);
  Bdd d = ab | bc;
  Bdd e = ab & (!ab);
  Bdd f = ab | (!ab);
  Bdd g = !ab;
  Bdd h = Nanobdd::getVar(0) & (!Nanobdd::getVar(0));

  std::cout << ab.level() << std::endl;
  return 0;
}